# -*- coding: UTF-8 -*-

import Pyro4 #@UnresolvedImport
from tkinter import *
import socket
from login import *
from VueTest import *
from joueur import *
from ModeleJeu import *
    
class client:
    def __init__(self):
        self.frameClient=1
        self.nomClient=""
        self.actionsEnAttente={}
        self.log = login(self)
        self.log.root.mainloop()
        
    def connecter(self,ipServeur, nom):
        print(ipServeur)      
        self.serveur=Pyro4.core.Proxy("PYRO:Serveur@"+ipServeur+":54440")
        self.ipClient = socket.gethostbyname(socket.gethostname())
        self.nomClient = nom
        self.serveur.loginServ(self.nomClient)
        self.seed = self.serveur.getSeed()

    def getJoueurs(self):
        joueurs = self.serveur.getNomsJoueurs()
        return joueurs
    
    def getNbJoueurs(self):
        joueurs = self.serveur.getNomsJoueurs()
        compteur = 0
        for i in joueurs:
            compteur+=1
        return compteur
    
    def getMinerais(self):
        return self.jeu.listeJoueurs[self.jeu.monId].mineraux
    
    def getPartieCommence(self):
        return self.serveur.isCommence()
    
    def debutPartie(self): ###UTILISER DANS LOGIN.PY###
        action = ["commencerPartie"]
        resultat = self.serveur.faireAction(self.nomClient,self.frameClient,action)
        
    def nouvellePartie(self):
        joueurs = self.serveur.getNomsJoueurs()
        self.vue = Vue2(self)
        self.jeu=Model(self,joueurs, self.seed)
        self.demarrerAffichage()
        self.vue.move_to(self.jeu.listeJoueurs[self.jeu.monId].vaisseaux[0].posx,self.jeu.listeJoueurs[self.jeu.monId].vaisseaux[0].posy)
        self.action()
        self.log.root.destroy()        
        self.vue.root.mainloop()
        
    def demarrerAffichage(self):
        self.jeu.deplacementVaisseau()
        self.jeu.deplacementUnite()
        self.vue.afficherMinerais()
        self.jeu.afficherToutNosVaisseaux()
        
        for e in self.jeu.univers.listeEtoiles:
            self.afficherEtoile(e)
            for p in e.listePlanete:
                self.afficherPlanete(p)
        
    def isAuJoueur(self, id):
        if id==self.jeu.monId:
            return True
        else:
            return False
        
    def envoyerAction(self,action):
        self.serveur.faireAction(self.nomClient,self.frameClient,action)
            
    def afficherEtoile(self,etoile):
        self.vue.afficherEtoile(etoile)
        
    def afficherPlanete(self,planete):
        self.vue.afficherPlanete(planete)
    
    def afficherVuePlanete(self):
        self.jeu.afficherVuePlanete()

            
    def changeDestination(self,x,y,listeObjet):
        self.jeu.changeDestination(x,y,listeObjet)
             
    def dessinerLigneAttaque(self,objet,ennemi):
        self.vue.ligneAttaque(objet,ennemi)
                    
    def afficherVaisseau(self,v):
        self.vue.afficherVaisseau(v)
    
    def afficherBatiment(self,b):
        self.vue.afficherBatiment(b)
        
    def afficherObjet(self,o):
        self.vue.afficherObjet(o)
        
    def changeVue(self):
        self.jeu.univers.isVueUnivers = not(self.jeu.univers.isVueUnivers)
    
    def getTypeVue(self):
        return self.jeu.getIsUnivers()
    
    def clicGauche(self,tags):
        self.jeu.clicGauche(tags)
        
    def clicDroit(self,clic,posx,posy):
        self.jeu.clicDroit(clic,posx,posy)
        
    def getListeVaisseaux(self):
        return self.jeu.getListeVaisseaux(self.jeu.monId)
    
    def getListeUnites(self):
        return self.jeu.getListeUnites()
    
    def getListeVaisseauxCourants(self):
        return self.jeu.getListeVaisseauxCourant(self.jeu.monId)
    
    def getListeUnitesCourants(self):
        return self.jeu.planeteCourante.uniteCourant
    
    def afficherVaisseauSelectionne(self):
        self.vue.afficherVaisseauSelectionne()
        
    def afficherUniteSelectionne(self):
        self.vue.afficherUniteSelectionne()

    def afficherUnite(self,u):
        self.vue.afficherUnite(u)
   
    def afficherInfoPlanete(self,p):
        self.vue.afficherInfoPlanete(p)
        
    def afficherInfoEtoile(self, e):
        self.vue.afficherInfoEtoile(e)
        
    def afficherInfoUnite(self, id):
       self.vue.afficherInfoUnite(id)
       
    def afficherInfoVaisseau(self, id):
        self.vue.afficherInfoVaisseau(id)
        
    def afficherInfoBatiment(self, id):
        self.vue.afficherInfoBatiment(id)
        
    def afficherVuePlaneteBloc(self, type, id):
        self.vue.afficherVuePlaneteBloc(type,id)
       
    def action(self):
        if(self.jeu.objet and self.jeu.ennemi):
            self.combat(self.jeu.objet, self.jeu.ennemi)

        self.ajoutActionsEnAttente()
        self.jeu.executerActions()    
        self.jeu.actionModel()
        self.frameClient+=1  
        self.vue.root.after(80,self.action)
        
    def ajoutActionsEnAttente(self):
        actionsAjout = self.serveur.miseAJour(self.nomClient,self.frameClient)
        if actionsAjout != {}:
            for i in actionsAjout.keys():
                if i in self.actionsEnAttente.keys():
                    self.actionsEnAttente[i].append(actionsAjout[i])
                else:
                    self.actionsEnAttente[i] = actionsAjout[i]
    
    def supprimerObjet(self,objet,type):
        self.vue.supprimerObjet(objet,type)
        
        
    def getPlaneteCourante(self):
        return self.jeu.planeteCourante
    
    def afficherUnivers(self):
        self.jeu.afficherUnivers()
        
    def getIdMonJoueur(self):
        return self.jeu.monId
    
    def coloniser(self):
        self.jeu.checkColo()
        
    def vaisseauProche(self):
        return self.jeu.vaisseauProche()

        
if __name__ == '__main__':
    cl = client()